package cn.csq.rpc.client;

import cn.csq.rpc.Peer;
import cn.csq.rpc.transport.TransportClient;
import cn.csq.rpc.transport.TransportServer;

import java.util.List;

/**
 * @author csq
 * @version 1.0.0
 * @ClassName TransportSelector.java
 * @Description 表示选择哪个server去连接
 * @createTime 2021年12月20日 23:00:00
 */
public interface TransportSelector {


    /**
     * 初始化客户端
     * @param peers 服务端的端点列表 可以连接的server端点信息
     * @param count 表示多少个连接 client和server建立多少个连接
     * @param clazz 连接client client实现类
     */
    void init(List<Peer> peers,int count,Class<? extends TransportClient> clazz);


    /**
     * 选择一个transport和server做连接
     *
     * @return 网络client
     */
    TransportClient select();

    /**
     * 释放用完的client
     *
     * @param client
     */
    void release(TransportClient client);


    void close();


}
